package io;



import java.io.File;
import java.io.FileOutputStream;

/**
 * IO：Input和Output，即：输入输出
 * Java将输入和输出用“流Stream”表达，分为输入流和输出流
 * 我们可以将他们想象为连接我们的程序和另一个设备之间的“管道”，通过他们可以读写设备
 * Java将输入流和输出流定义了两个对应的超类InputStream和OutputStream：
 * 1）InputStream：
    输入流；方向是从外界到程序的方向，用于读取数据的流。是一个抽象类，定义了读取字节的相关方法
 * 2）OutStream：
    输出流；方向是从程序到外界的方向，用于写出数据的流。是一个抽象类，定义了输出字节的相关方法

    文件流：FileInputStream和FileOutputStream
    文件流继承自InputStream和OutputStream，用于对文件进行读写操作
 */

public class FOSDemo {
    public static void main(String[] args) throws Exception {
        /*
        文件输出流两个常用的构造器：
        1）FileOutStream（String fileName）
        2)FileOutputStream(File file)
        文件流创建时如果指定的文件不存在则会自动创建，前提是该文件所在的目录必须存在，若不存在则发生异常
         */
        File file =new File("fos.fat");
//        FileOutputStream fos = new FileOutputStream(file,true);//根据File实例定义文件输出流

        FileOutputStream fos= new FileOutputStream("fos.dat");//定义文件输出流
        /*
            void write(int d):
            通过该输出流向目标位置写出1个字节，写出的是给定的int值对应的2进制的"低八位"

            当 fos.write(1);//向fos.dat中输出了1个字节
            int值的2进制样子：0000000 0000000 00000000 00000001
                                                     ^^^^^^^^
                                                     写入该字节
            write()后，fos.dat文件内容（长度为1个字节）：
            00000001

            当 fos.write(2);//又向fos.dat中输出了1个字节
            int值的2进制样子：0000000 0000000 00000000 00000010
                                                     ^^^^^^^^
                                                     写入该字节
            write()后，fos.dat文件内容（长度为1个字节）：
            00000001 00000010
        */
        long start = System.currentTimeMillis();

        fos.write(1);//向fos.dat中输出了1个字节
        fos.write(2);//向fos.dat中又输出了1个字节
        fos.write(257);
        long end = System.currentTimeMillis();
        System.out.println("耗时"+(end-start)+"ms");
        System.out.println("写入完毕");
        fos.close();//关闭流


    }
}
